package club.service.impl;

import club.dao.AdminMapper;
import club.pojo.Admins;
import club.service.AdminService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;

/**
 * 管理员服务实现类
 * 实现AdminService接口，处理管理员相关业务逻辑
 */
@Service
@Transactional
// 开启事务支持

public class AdminServiceImpl implements AdminService {

    @Resource
    private AdminMapper adminMapper;
    // 注入管理员数据访问层

    /**
     * 分页查询管理员列表（支持按用户名搜索）
     * @param adminName 管理员用户名（可选，用于模糊查询）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果对象，包含管理员列表及分页信息
     */
    @Override
    public PageInfo<Admins> adminPage(String adminName, Integer pageNum, Integer pageSize) {
        // 开启分页功能，指定页码和每页数量
        PageHelper.startPage(pageNum, pageSize);

        // 构建查询条件
        EntityWrapper<Admins> wrapper = new EntityWrapper<>();
        if (adminName != null && !"".equals(adminName)) {
            wrapper.like("adminName", adminName);
            // 添加用户名查询条件
        }

        // 执行查询
        List<Admins> list = adminMapper.selectList(wrapper);

        // 封装分页信息
        return new PageInfo<>(list);
    }

    /**
     * 管理员登录验证
     * @param adminName 用户名
     * @param adminPwd 密码
     * @return 登录成功返回管理员对象，失败返回null
     */
    @Override
    public Admins login(String adminName, String adminPwd) {
        // 构建查询条件对象
        Admins query = new Admins();
        query.setAdminName(adminName);

        // 根据用户名查询管理员
        Admins admin = adminMapper.selectOne(query);

        // 验证密码（注意：实际项目中密码应加密存储并比对）
        if (admin != null && admin.getAdminPwd().equals(adminPwd)) {
            return admin;
        }
        return null;
    }

    /**
     * 分页查询所有管理员（方法未实现，直接返回null）
     * @param adminName 管理员用户名（可选，用于模糊查询）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果对象
     */
    @Override
    public PageInfo<Admins> allAdmin(String adminName, int pageNum, int pageSize) {
        return null;
        // 方法未实现
    }

    /**
     * 添加新管理员
     * @param admins 管理员对象
     * @return 插入成功返回1，失败返回0
     */
    @Override
    public int add(Admins admins) {
        return adminMapper.insert(admins);
        // 调用Mapper插入数据
    }

    /**
     * 更新管理员信息
     * @param admins 管理员对象（需包含ID）
     * @return 更新成功返回1，失败返回0
     */
    @Override
    public int update(Admins admins) {
        return adminMapper.updateById(admins);
        // 调用Mapper更新数据
    }

    /**
     * 根据ID查询管理员
     * @param id 管理员ID
     * @return 管理员对象，不存在则返回null
     */
    @Override
    public Admins findById(Integer id) {
        return adminMapper.selectById(id);
        // 调用Mapper查询数据
    }

    /**
     * 根据ID删除管理员
     * @param id 管理员ID
     * @return 删除成功返回1，失败返回0
     */
    @Override
    public int del(Integer id) {
        return adminMapper.deleteById(id);
        // 调用Mapper删除数据
    }
}